/**
 * 微笑云工具类
 */	
var jsmile=jsmile||{};

/**
 * 微笑云常量
 */
jsmile.config={
	/*
	 * 运营平台系统id
	 */
	systemId:'01'
};
/**
 * 获取当前项目名称
 */
jsmile.url= "http://localhost:16000/authc";
jsmile.token="";
/**
 * layer弹出框
 */
jsmile.dialog={
	close: function(){
        var index = parent.layer.getFrameIndex(window.name);
        top.layer.close(index);
	},
	init: function(option){
        if (!option.w) {
            option.w=($(window).width()*0.9);
        };
        if (!option.title) {
            option.title="信息";
        };
        if (!option.content){
            option.content="404.html";
        };
        if (!option.h) {
            option.h=($(window).height() - 50);
        };
        var opt={
            type: 2,
            area: [option.w+'px', option.h +'px'],
            fixed: false, //不固定
            maxmin: true,
            shadeClose: true,
            shade:0.4,
			title: "信息"
		};
        for(var i in option){
            opt[i] = option[i]?option[i]:opt[i];
        }
        return opt;
	}
};
jsmile.hash={
    /**
     * 加密（需要先加载lib/aes/aes.min.js文件）
     * @param word
     * @returns {*}
     */
    encrypt: function (word){
    var key = CryptoJS.enc.Utf8.parse("bec2aks8bnhs2io4");
    var srcs = CryptoJS.enc.Utf8.parse(word);
    var encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
    return encrypted.toString();
},

/**
 * 解密
 * @param word
 * @returns {*}
 */
decrypt:function (word){
    var key = CryptoJS.enc.Utf8.parse("bec2aks8bnhs2io4");
    var decrypt = CryptoJS.AES.decrypt(word, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7});
    return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
};
/**
 * 微笑云http请求
 */
jsmile.http={
		/*
		 * 发送微笑云http-form请求
		 * 默认都是post方法
		 */
		sendForm:function(options){
			return jsmile.http.send(options);
		},
		/*
		 * 发送微笑云http-json请求
		 * 默认都是post方法
		 */
		sendJson:function(options){
			options.contentType="application/json";
			return jsmile.http.send(options);
		},
		/*
		 * 微笑云jquery请求
		 * 默认都是post方法
		 */
		send:function(options){
			var settings={
				async:true,
				dataType:"json",
                headers: {"client_source":"jsmile-authc",
                    "sys_no":"authc",
                    "tenant_id":"9999",
                    "Authorization":sessionStorage.getItem("token")||jsmile.token,
                    "tenant_id":9999,"request_id":new Date().getTime()},
				data:{},
				contentType:"application/x-www-form-urlencoded",
				type:"post"
			};
			for(var i in options){
				settings[i] = options[i]?options[i]:settings[i];
			}
			if(settings.contentType=='application/json'){
				settings.data=JSON.stringify(settings.data);
			}
			return $.ajax(settings).then(function(res){
				if(res.resSuccess){
					return res;
				}else{
                    console.log(res);
					return $.Deferred().reject(res);
				}
			},function(err){
				console.log("请求地址【"+settings.url+"】失败:");
                return $.Deferred().reject(err);
			});
		}		
};
/**
 * 通用数据字典
 */
jsmile.dict={
	sf: [{dictName:"是",dictValue:1},{dictName:"否",dictValue:0}],
	zt: [{dictName:"启用",dictValue:1},{dictName:"禁用",dictValue:0}]
};
/**
 * jquery对象拷贝
 */
jsmile.copy=function(o,obj,flag){
	if(flag&&true==flag){
		return jQuery.extend(o,obj);
	}
    return jQuery.extend(true,o, obj);

}
/**
 * 通用消息
 */
jsmile.msg={
	error: function(msg){
        top.app.$message.error(msg);
	},
	warn: function(msg){
        top.app.$message({ type: 'warning',message:msg});
	},
	success: function(msg){
        top.app.$message({ type: 'success',message:msg});
	},
    info: function(msg){
        top.app.$message({ type: 'info',message:msg});
    }
};

/**
 * jsmile js工具类
 */
jsmile.util={
	isString:function(str){
    	return (typeof str=='string')&&str.constructor==String; 
    },		
    isArray:function(obj){
    	return (typeof obj=='object')&&obj.constructor==Array; 
    },
    isObject:function(obj){
    	return (typeof obj=='object')&&obj.constructor==Object; 
    },
    isFunction:function(obj){
    	return (typeof obj=='function')&&obj.constructor==Function; 
    },
	/*
	 * s:url,sProp要获取的属性
	 * 如url为/sd/asd?a=1&b=2
	 * getQueryString('a',url)
	 */
	getQueryString:function(sProp,s){
	    var re = new RegExp("[&,?]"+sProp + "=([^//&]*)", "i");  
	    var a = re.exec(s);  
	    if (a == null)  
	        return "";  
	    return a[1]; 
	},
	/*
	 * 解析uri传来的参数为json
	 * 如a=1&b=2
	 */
	paresURI:function(){
		   var patten=/([-\w]+)=([\w,%]+)/ig;
		   var parames = {};
		   document.location.search.replace(patten, function(a, b, c){
		       parames[b] = c;
		   });
		   return parames;
	},
	isBlank:function(value){
		if(value==null||value==undefined||String(value).replace(/(^\s*)|(\s*$)/g,"").length<=0){
			return true;
		}
		if(typeof(value)=="object"){
			 for (var item in value){
				 return false;
			 }
			 return true;
		}
	},
	isNotBlank:function(value){
		var _this=this;
		return !_this.isBlank(value);
	},
	isUserName: function (str) {//  验证是否可以作为合法的用户名字符(字母开头，允许2-16字节，允许字母数字下划线)
		var _this=this;
		str = _this.isBlank(str) ? "" : String(str);
	    return /^[a-zA-Z]{1}[0-9a-zA-Z_]{1,15}$/i.test(str);
	},
    validateDictCode: function (str) {//  验证是否可以作为合法的用户名字符(字母开头，允许2-16字节，允许字母数字下划线)
        var _this=this;
        str = _this.isBlank(str) ? "" : String(str);
        return /^[A-Z]{2}[0-9_]{2}$/i.test(str);
    },
	isTel : function (str) {//  判断当前 String 对象是否是正确的电话号码格式(中国)。
		var _this=this;
	    str = _this.isBlank(str) ? "" : String(str);
	    return /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(str);
	},
	isMobile : function (str) {//  判断当前 String 对象是否是正确的手机号码格式(中国)。
		var _this=this;
		str = _this.isBlank(str) ? "" : String(str);
	    return /^(13|14|15|17|18)\d{9}$/i.test(str);
	},
	isTelOrMobile : function (str) {//  判断当前 String 对象是否是正确的电话号码或者手机号码格式(中国)
		var _this=this;
		return _this.isTel(str) || _this.isMobile(str);
	},
	isZipCode : function (str) {//  判断当前 String 对象是否是正确的 邮政编码(中国) 格式。
		var _this=this;
		str = _this.isBlank(str) ? "" : String(str);
	    return /^[\d]{6}$/.test(str);
	},
	existChinese: function (str) {//  判断当前 String 对象是否是否存在汉字字符。
		var _this=this;
		str = _this.isBlank(str) ? "" : String(str);
	    //[\u4E00-\u9FA5]為漢字﹐[\uFE30-\uFFA0]為全角符號
	    return !/^[\x00-\xff]*$/.test(str);
	},
	isChinese: function (str) {//  验证中文
		var _this=this;
		str = _this.isBlank(str) ? "" : String(str);
	    return /^[\u0391-\uFFE5]+$/i.test(str);
	},
	isEnglish : function (str) {//  验证英文
		var _this=this;
		str = _this.isBlank(str) ? "" : String(str);
	    return /^[A-Za-z]+$/i.test(str);
	},
	isNumber:function(value){
		var reg =/^[0-9]*$/;  
        return reg.test(value);  
	},
    isNumberNum:function(value){
        var reg = /^[0-9]+(.[0-9]{2})?$/;
        return reg.test(value);
    },
	isEmail : function (str) {//判断当前 String 对象是否是正确的 电子邮箱地址(Email) 格式。
		var _this=this;
		str = _this.isBlank(str) ? "" : String(str);
	    return str.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1;
	},
	stringToList: function(value) {//接收一个以逗号分割的字符串，返回List，list里每一项都是一个字符串
	    if (value != undefined && value != '') {
	        var values = [];
	        var t = value.split(',');
	        for ( var i = 0; i < t.length; i++) {
	            values.push('' + t[i]);/* 避免他将ID当成数字 */
	        }
	        return values;
	    } else {
	        return [];
	    }
	}	
};
jsmile.tree={
    /**
     * 获取tree选中checkbox
     */
	getCheckData: function(tree){
		var _tree=[];
	   if(tree){
		   for (var i = 0; i < tree.length; i++) {
			   _tree.push(tree[i].id)
		   }
	   }
	   return _tree;
	},
    /**
     * 将数组转为tree结构
     */
    toTree: function(rows,opt){
        var _pId=opt.parentId ||0;
        opt=opt||{};
        var idField=opt.idField || 'id',
            textField=opt.textField || 'name',
            lv=opt.level||88,
            parentField= opt.parentField||"parentId";
        var nodes = [];
        // get the top level nodes
        for(var i=0; i<rows.length; i++){
            var row = rows[i];
            if (row[parentField]==_pId){
                var n=jQuery.extend(true, {}, row);
                n.value=row[idField];
                n.label=row[textField];
                if(!n.attributes){
                    n.attributes={level:1};
                }else{
                    n.attributes.level=1;
                }
                nodes.push(n);
            }
        }
        var toDo = [];
        for(var i=0; i<nodes.length; i++){
            toDo.push(nodes[i]);
        }
        while(toDo.length){
            var node = toDo.shift();	// the parent node
            var isLeaf=false;
            // get the children nodes
            for(var i=0; i<rows.length; i++){
                var row = rows[i];
                if(node.attributes.level!=lv){
                    if (row[parentField] == node[idField]){
                        var child=jQuery.extend(true, {}, row);
                        child.value=row[idField];
                        child.label=row[textField];
                        if(!child.attributes){
                            child.attributes={level:node.attributes.level+1};
                        }else{
                            child.attributes.level=node.attributes.level+1;
                        }
                        if (node.children){
                            node.children.push(child);
                        } else {
                            node.children = [child];
                        }
                        toDo.push(child);
                        node.state='closed';
                        isLeaf=true;
                    }
                }
            }
            if(!isLeaf){
                node.state='open';
            }
        }
        return nodes;
	},
    toDictTree: function(rows,opt){
        var _pId=opt&&opt.parentId || null;
        opt=opt||{};
        var idField=opt.idField || 'id',
            textField=opt.textField || 'name',
            lv=opt.level||88,
            parentField= opt.parentField||"parentId";
        var nodes = [];
        // get the top level nodes
        for(var i=0; i<rows.length; i++){
            var row = rows[i];
            if (row[parentField]==_pId){
                var n=jQuery.extend(true, {}, row);
                n.value=row[idField];
                n.label=row[textField]+"-"+row.dictCode;
                if(!n.attributes){
                    n.attributes={level:1};
                }else{
                    n.attributes.level=1;
                }
                nodes.push(n);
            }
        }
        var toDo = [];
        for(var i=0; i<nodes.length; i++){
            toDo.push(nodes[i]);
        }
        while(toDo.length){
            var node = toDo.shift();	// the parent node
            var isLeaf=false;
            // get the children nodes
            for(var i=0; i<rows.length; i++){
                var row = rows[i];
                if(node.attributes.level!=lv){
                    if (row[parentField] == node[idField]){
                        var child=jQuery.extend(true, {}, row);
                        child.value=row[idField];
                        child.label=row[textField]+"-"+row.dictCode;
                        if(!child.attributes){
                            child.attributes={level:node.attributes.level+1};
                        }else{
                            child.attributes.level=node.attributes.level+1;
                        }
                        if (node.children){
                            node.children.push(child);
                        } else {
                            node.children = [child];
                        }
                        toDo.push(child);
                        node.state='closed';
                        isLeaf=true;
                    }
                }
            }
            if(!isLeaf){
                node.state='open';
            }
        }
        return nodes;
    },
    /**
     * 获取cascader的选中值
     */
    getTreeData: function(key, treeData){
        var arr = []; // 在递归时操作的数组
        var returnArr = []; // 存放结果的数组
        var depth = 0; // 定义全局层级
        // 定义递归函数
        function childrenEach(childrenData, depthN) {

            for (var j = 0; j < childrenData.length; j++) {

                depth = depthN; // 将执行的层级赋值 到 全局层级

                arr[depthN] = (childrenData[j].value);

                if (childrenData[j].value == key) {

                    // returnArr = arr; // 原写法不行, 因 此赋值存在指针关系
                    returnArr = arr.slice(0, depthN+1); //将目前匹配的数组，截断并保存到结果数组，
                    break

                } else {

                    if (childrenData[j].children) {

                        depth ++;
                        childrenEach(childrenData[j].children, depth);

                    }
                }

            }
            return returnArr;
        }
        return childrenEach(treeData, depth);
	}
};
